package main

import (
	"github.com/gin-gonic/gin"
	"github.com/goccy/go-json"
	"net/http"
)

// Java：拦截器  Go：中间件
func myHandler() gin.HandlerFunc {
	return func(context *gin.Context) {
		//context.xx
		context.Next() //放行
		//context.Abort() // 拦截
	}
}

func main() {
	ginServer := gin.Default()
	ginServer.GET("/hello", myHandler(), func(context *gin.Context) {
		context.JSON(200, gin.H{"msg": "hello go"})
	})

	//获取请求参数
	ginServer.GET("/user/info", func(context *gin.Context) {
		userId := context.Query("userId")
		context.JSON(http.StatusOK, gin.H{"status": "200", "userId": userId})
	})

	//restFull
	ginServer.GET("/user/info/:userId", func(context *gin.Context) {
		userId := context.Param("userId")
		context.JSON(http.StatusOK, gin.H{"status": "200", "userId": userId})
	})

	//前端给后端传递 json
	ginServer.POST("/user/info", func(context *gin.Context) {
		rawData, _ := context.GetRawData()
		var m map[string]interface{}
		json.Unmarshal(rawData, &m)
		context.JSON(http.StatusOK, m)
	})

	//表单传参
	ginServer.POST("/user/info/form", func(context *gin.Context) {
		userId := context.PostForm("userId")
		username := context.PostForm("username")
		context.JSON(http.StatusOK, gin.H{"userId": userId, "username": username})
	})

	//路由
	ginServer.GET("/routeTest", func(context *gin.Context) {
		//重定向
		context.Redirect(http.StatusMovedPermanently, "https://www.baidu.com")
	})

	// 404
	ginServer.NoRoute(func(context *gin.Context) {
		context.HTML(http.StatusNotFound, "404.html", nil)
	})

	//路由组  /user/get
	userGroup := ginServer.Group("/user")
	{
		userGroup.GET("/get")
		userGroup.POST("/post")
		userGroup.PUT("/put")
	}

	ginServer.Run(":8080")
}
